A core dump is performed to record portions of memory to a persisted state. Generally, a core dump is performed in response to a detected error, such that the recorded portions of the memory may be analyzed to diagnose and debug the error. Traditionally, the recorded portions of memory have been restricted to processor memory, registers, and some log data.
The recorded portions of memory from a core dump are conventionally persisted to the same storage array in which the core dump was performed. The core dump may then be offloaded from the storage array to another server for analysis and debugging.
A traditional core dump does not capture all information corresponding to the system state of the storage array. Accordingly, the storage array may be maintained in a relatively unmodified state, such that system information may be accessed as needed. Isolating a root cause of an error by analyzing data included in a core dump may be time-consuming and difficult. Thus, the storage array may be removed from service for a long period of time to avoid risking loss to the system state information that is not recorded in the core dump. In other instances, the storage array may be returned to operation, which may result in losing valuable system state information that would have been helpful for debugging the cause of the error and/or recovering lost data.
Accordingly, a technique for allowing analysis and debugging of core dump data to be performed without significantly reducing performance of the storage array or risking loss of the system state of the storage array would provide numerous advantages to both storage array performance and error diagnosis/recovery. Thus, while existing core dump techniques have been generally adequate for diagnosis of fatal programming errors, limitations remain.